package com.nami.logic.service;

import com.nami.store.api.bo.UserDevice;
import com.nami.store.api.bo.UserDeviceDetailInfo;
import com.nami.store.api.bo.UserWrap;
import com.nami.store.api.request.cache.CacheDelReq;

import java.util.List;
import java.util.Map;

public interface UserService {

    /**
     * 获取用户， 没有是否在线条件
     *
     * @param appKey
     * @param userId
     * @return
     */
    UserWrap getUserById(String appKey, String userId);

    /**
     * 获取缓存的用户， 不关心在不在线
     *
     * @param appKey
     * @param userIds
     * @return
     */
    Map<String, UserWrap> getUserByIds(String appKey, List<String> userIds);

    /**
     * get
     * 从一级缓存取，
     * 没有，则从数据库取
     *
     * @param userId
     * @return
     */
    UserWrap getOnrUserById(String appKey, String userId);

    /**
     * get more user
     *
     * @param appKey
     * @param userIds
     * @return
     */
    Map<String, UserWrap> getOnrUsersByUserIds(String appKey, List<String> userIds);

    /**
     * 从cache获取，获取不到，从redis取
     *
     * @param appKey
     * @param userId
     * @return
     */
    List<UserDevice> getOnlineDevicesByUserId(String appKey, String userId);

    /**
     * 获取在线设备 除了当前
     *
     * @param appKey
     * @param userId
     * @param deviceType
     * @return
     */
    List<UserDevice> getOnlineDevicesExceptThisDevice(String appKey, String userId, Integer deviceType);

    /**
     * 获取在线设备 并按mqTags分类
     *
     * @param appKey
     * @param users
     * @return
     */
    Map<String, List<UserDeviceDetailInfo>> obtainOnlineDevicesByClassifyMqTags(String appKey, List<String> users);

    /**
     * 下线客户端
     * 1. del一级缓存 数据
     * 2. del 二级缓存 数据
     *
     * @param request
     * @return
     */
    boolean removeOfflineUser(CacheDelReq request);

}
